Projekt Pronal Projekt Pronal

Kazalo:
Sofinasiranje projekta
Starejši - učbenik...
Starejši - zbirka nalog...
Tekmovanja - dopolni...
Tekmovanja - Parsons...
Tekmovanja - popravi...
Tekmovanja
rtk 1988
rtk 1996
rtk 1998
rtk 1999
rtk 2000
rtk 2001
rtk 2002
rtk 2004
rtk 2006
rtk 2007
rtk 2008
rtk 2009
rtk 2011
rtk 2013
rtk 2014
rtk 2016
rtk 2017
rtk 2018
rtk2010
rtk 1996

rtk 1996


1996.1.1 (napisi)

Urejanje števil

1. podnaloga

Katja zelo rada programira, zato je napisala funkcijo, ki sprejme seznam števil, jih uredi po velikosti od najmanjšega do največjega in vrne urejen seznam. Nekega jutra je bila zelo zaspana in je funkcijo po nesreči izbrisala.

Naloga

Pomagaj Katji in namesto nje napiši ustrezno funkcijo uredi_stevila(seznam).

Vhodni podatki

Seznam števil, ki niso urejena po velikosti.

Izhodni podatki

Seznam s števili, urejenimi po velikosti naraščajoče.

Komentar

Funkcija je eden izmed znanih algoritmov za urejanje seznamov. Lahko si pomagaš s člankom na Wikipedii.

Uradna rešitev

def uredi_stevila(seznam):
	'''Sprejme seznam števil in jih uredi po velikosti naraščajoče.'''

	n = len(seznam)
	i = 1
	while i < n:
		j = i
		while j > 0 and seznam[j-1] > seznam[j]:
			seznam[j-1], seznam[j] = seznam[j], seznam[j-1]
			j += -1
		i += 1
	return seznam

1996.1.2 (napisi)

Ogrlice

1. podnaloga

Maja v prostem času rada sestavlja ogrlice, pri tem pa za vsako uporabi $n$ kroglic, ki jih naniza eno za drugo. Vsako izdelano ogrlico opiše z nizom števil od $0$ do $9$, pri čemer vsako število označuje določeno barvo.

Primer zapisa ogrlice: '12345'

Naloga

Pomagaj Maji sestaviti funkcijo primerjaj_ogrlici(ogrlica1, ogrlica2), s katero bo lahko preverila ali sta dve ogrlici enaki ali ne. Funkcija naj vrne True, če sta ogrlici enaki, in False, če se razlikujeta.

Ogrlici sta enaki, če sta enaka njuna niza. Ker so ogrlice krožne, lahko za prvo kroglico izberemo poljubno kroglico iz ogrlice. Enako torej velja za njen niz. Predpostavimo, da je število $n$ za ogrlici, ki ju primerjamo enako.

Vhodni podatki

Dva niza, ki predstavljata ogrlici.

Izhodni podatki

Funkcije vrne vrednost True ali False.

Primer:
>>> primerjaj_ogrlici('1234567890','7890123456')
True
>>> primerjaj_ogrlici('1234567890','1234567809')
False

Uradna rešitev

def primerjaj_ogrlici(ogrlica1, ogrlica2):
    '''Funkcija vrne True, če sta ogrlici enaki in False sicer.'''

    n = len(ogrlica1)
    for i in range(n):
        ogrlica3 = ogrlica2[i:] + ogrlica2[:i]
        if ogrlica1 == ogrlica3:
            return True
    return False

# drugi način:
# def primerjaj_ogrlici(ogrlica1, ogrlica2):
#     '''Funkcija vrne True, če sta ogrlici enaki in False sicer.'''
#
#     ogrlica3 = ogrlica1 + ogrlica1
#     if ogrlica2 in ogrlica3:
#         return True
#     else:
#         return False

1996.1.3 (napisi)

Domača naloga

1. podnaloga

Miha je na računalniku napisal domačo nalogo za slovenščino in jo poslal očetu v pregled. Oče je vanjo vpisal svoje pripombe tako, da jih je obdal z znakoma < na začetku in > na koncu.

Naloga

Napiši funkcijo odstrani_komentarje(niz), ki bo iz Mihove domače naloge odstranila vse komentarje.

Vhodni podatki

Domača naloga napisana v obliki niza.

Izhodni podatki

Domača naloga v obliki niza, brez očetovih komentarjev.

Primer

Vhod
>>> odstrani_komentarje('Danes je lepo, sončno vreme <kaj pa še, danes dežuje> in ptički pojejo.')
Izhod
'Danes je lepo, sončno vreme  in ptički pojejo.'

Komentar

Dvojnih presledkov, ki nastanejo pri brisanju komentarjev, ni treba odstraniti.

Uradna rešitev

def odstrani_komentarje(niz):
    '''Funkcija iz besedila odstrani vse kar se nahaja med znakoma < in >.'''

    nov_niz = ""
    komentar = False
    for znak in niz:
        if znak == '<':
            komentar = True
            continue
        elif znak == '>':
            komentar = False
            continue

        if not komentar:   # nahajamo se zunaj komentarja
            nov_niz += znak
    return nov_niz

1996.2.1 (napisi)

Palindromi števil

1. podnaloga

Besedo ali stavek, ki se nazaj bere enako kot naprej, imenujemo palindrom. Podobno so številski palindromi števila, katerih zapis v desetiškem sistemu je z desne proti levi enak kot z leve proti desni (taki števili sta naprimer $48584$ in $232$).

Katera pa so števila, za katere je vsota števila (npr. $16$) in njegovega obrata ($61$: število $16$ preberemo od desne proti levi) palindrom?

Naloga

Napiši funkcijo vsota_palindrom(n), ki vrne vsa zgoraj opisana števila med $0$ in $n$ (števili $0$ in $n$ nista zajeti).

Vhodni podatki

Število $n$, do katerega želimo poiskati vsa ustrezna števila.

Izhodni podatki

Seznam števil, ki ustrezajo opisu.

Primer

>>> vsota_palindrom(10)
    [1, 2, 3, 4]

Uradna rešitev

def obrat_stevila(x):
    '''Funkcija vrne število, ki ga dobimo, če x zapišemo
       v desetiškem sistemu in ga preberemo od desne proti levi.'''
    y = 0
    while x > 0:
        y = y * 10 + x % 10
        x = (x - y % 10) / 10
    return y

def vsota_palindrom(n):
    '''Funkcija izpiše vsa števila do n, za katera velja,
       da je vsota števila in njegovega obrata palindrom.'''
    ustrezna_stevila = []
    for i in range(1, n):
        if obrat_stevila(obrat_stevila(i) + i) == obrat_stevila(i) + i:
            ustrezna_stevila.append(i)
    return ustrezna_stevila
Mesto objave ob koncu projekta 15.9.2018